package problema011;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;

public class GridProduct {
	static int[][]	matriz;
	static int mayor;
	
	public static void main(String[] args){
		System.out.println(largestGridProduct());
	}
	
	public static int largestGridProduct(){
		mayor = 0;
		leer();
		for(int fila = 0; fila < 20; fila++){
			for(int col = 0; col < 20; col++){
				chequearAbajo(fila, col);
				chequearDerecha(fila, col);
				chequearDiagIzq(fila, col);
				chequearDiagDer(fila, col);
			}
		}
		return mayor;
	}
	
	public static void chequearAbajo(int fila, int col){
		if(fila > 16) return;
		int actual = 1;
		for(int i = 0; i < 4; i++) actual *= matriz[fila+i][col]; 
		
		
		if(actual > mayor) mayor = actual;
	}
	
	public static void chequearDerecha(int fila, int col){
		if(col > 16) return;
		int actual = 1;
		for(int i = 0; i < 4; i++) actual *= matriz[fila][col+i]; 
		if(actual > mayor) mayor = actual;
	}
	
	public static void chequearDiagIzq(int fila, int col){
		if(col < 3 || fila > 16) return;
		int actual = 1;
		for(int i = 0; i < 4; i++) actual *= matriz[fila+i][col-i]; 
		if(actual > mayor) mayor = actual;
	}
	
	public static void chequearDiagDer(int fila, int col){
		if(fila > 16 || col > 16) return;
		int actual = 1;
		for(int i = 0; i < 4; i++) actual *= matriz[fila+i][col+i]; 
		if(actual > mayor) mayor = actual;
	}
	
	
	public static void leer(){
		matriz = new int[20][20];
		try{
			BufferedReader reader = new BufferedReader( new FileReader("matrizEj11.txt") );
			String linea;
			int fila = 0;
			while ((linea = reader.readLine()) != null){
				StringTokenizer st = new StringTokenizer(linea, " " );
				int col = 0;
				while (st.hasMoreTokens()){
					matriz[fila][col] = Integer.parseInt(st.nextToken().trim());
					col++;
				}
				fila++;
			}
			reader.close();
			}catch (Exception e){
				System.err.println("Error: " + e.getMessage());
			}
	}
}
